# HUB 插件主模块
# 包含插件的主要功能和UI定义

require 'sketchup.rb'
require 'net/http'
require 'uri'

module HUB
  # 模块常量 - 已在HUB.rb中定义，这里不再重复定义
  # PLUGIN_NAME = 'HUB 快递柜'.freeze
  PLUGIN_ID = 'HUB'.freeze # 仅保留此常量，因为它在HUB.rb中未定义
  
  # 版本文本 - 新格式
  def self.current_version_text
    "当前版本：#{VERSION}"
  end
  
  # 获取最新版本的文本
  def self.new_version_text
    @new_version_text ||= get_remote_version
  end
  
  # 从远程配置获取最新版本号
  # @return [String, nil] 最新版本号或nil（如果获取失败）
  def self.get_remote_version
    begin
      uri = URI('http://api.cdsjcc.cn/hub/ss1.txt')
      response = Net::HTTP.get_response(uri)
      
      if response.is_a?(Net::HTTPSuccess)
        return parse_version_from_config(response.body)
      end
    rescue => e
      puts "HUB: 获取远程版本失败: #{e.message}"
    end
    nil
  end
  
  # 从配置内容解析版本号
  # @param config_content [String] 配置文件内容
  # @return [String, nil] 解析出的版本号或nil
  def self.parse_version_from_config(config_content)
    if config_content =~ /\[zxbb\]="([^"]+)"/
      return "新版版本：#{$1}"
    end
    nil
  end
  
  # 全局标志，用于记录工具栏是否已创建
  @toolbar_created = false
  
  # 使用file_loaded?机制防止重复加载
  unless file_loaded?(__FILE__)
    # 定义需要加载的子模块列表
    SUBMODULES = [
      "HUB/config",
      "HUB/ui",
      "HUB/ss",
      "HUB/dd"
    ]
    
    # 加载所有子模块
    SUBMODULES.each do |module_path|
      begin
        Sketchup.require module_path
        puts "HUB: 成功加载模块 #{module_path}"
      rescue LoadError => e
        puts "HUB: 加载模块 #{module_path} 失败: #{e.message}"
        UI.messagebox("HUB插件无法加载模块 #{module_path}。\n\n错误: #{e.message}")
      end
    end
    
    # 创建菜单
    def self.create_menus
      # 添加插件菜单项
      menu = UI.menu("Extensions")
      submenu = menu.add_submenu(PLUGIN_NAME)
      
      # 添加上传功能菜单项
      submenu.add_item("上传模型 (获取提取码)") { start_upload_model }
      
      # 添加下载功能菜单项
      submenu.add_item("下载模型 (输入提取码)") { start_download_model }
      
      # 添加帮助菜单项
      submenu.add_separator
      submenu.add_item("关于") { show_about_dialog }
    end
    
    # 创建工具栏
    def self.create_toolbar
      # 检查工具栏是否已创建
      if @toolbar_created
        puts "HUB: 工具栏 '#{PLUGIN_NAME}' 已存在，跳过创建"
        return nil
      end
      
      puts "HUB: 创建工具栏 '#{PLUGIN_NAME}'"
      
      # 创建工具栏
      toolbar = UI::Toolbar.new(PLUGIN_NAME)
      
      # 获取图标目录路径
      icons_dir = File.join(File.dirname(__FILE__), 'icons')
      
      # 添加上传按钮
      cmd_upload = UI::Command.new("上传模型") { start_upload_model }
      cmd_upload.tooltip = "上传模型并获取提取码"
      cmd_upload.status_bar_text = "上传当前模型到HUB服务器并获取提取码"
      # 设置图标
      cmd_upload.small_icon = File.join(icons_dir, 'ss.png')
      cmd_upload.large_icon = File.join(icons_dir, 'ss.png')
      toolbar.add_item(cmd_upload)
      
      # 添加下载按钮
      cmd_download = UI::Command.new("下载模型") { start_download_model }
      cmd_download.tooltip = "通过提取码下载模型"
      cmd_download.status_bar_text = "输入提取码下载模型"
      # 设置图标
      cmd_download.small_icon = File.join(icons_dir, 'dd.png')
      cmd_download.large_icon = File.join(icons_dir, 'dd.png')
      toolbar.add_item(cmd_download)
      
      # 显示工具栏
      toolbar.show
      
      # 标记工具栏已创建
      @toolbar_created = true
      
      return toolbar
    end
    
    # 启动上传模型过程
    def self.start_upload_model
      upload_model_impl
    end
    
    # 启动下载模型过程
    def self.start_download_model
      # 确保调用正确的方法
      begin
        puts "开始下载模型流程..."
        download_model_impl
      rescue => e
        puts "启动下载模型流程时出错: #{e.message}\n#{e.backtrace.join("\n")}"
        UI.messagebox("启动下载模型流程时出错: #{e.message}")
      end
    end
    
    # 启动导入本地模型过程
    def self.start_import_local
      begin
        puts "开始导入本地模型..."
        import_from_local
      rescue => e
        puts "启动导入模型流程时出错: #{e.message}\n#{e.backtrace.join("\n")}"
        UI.messagebox("启动导入模型流程时出错: #{e.message}")
      end
    end
    
    # 显示关于对话框
    def self.show_about_dialog
      # 构建消息内容
      about_message = "HUB 快递柜 插件\n#{current_version_text}"
      
      # 如果存在新版本信息，则添加到消息中
      new_version = new_version_text
      if new_version && !new_version.empty?
        about_message += "\n#{new_version}"
      end
      
      # 添加其他信息
      about_message += "\n\n此插件提供模型上传和下载功能。\n\n作者：詹广权\n网站：http://www.cdsjcc.cn/xgj"
      
      # 显示消息对话框
      UI.messagebox(about_message, MB_OK)
    end
    
    # 初始化插件 - 创建菜单和工具栏
    self.create_menus
    self.create_toolbar
    
    # 输出加载信息
    puts "HUB 插件已加载，版本 #{VERSION}"
    
    # 标记此文件已加载
    file_loaded(__FILE__)
  end
end # module HUB 